@echo off
setlocal enabledelayedexpansion

echo [信息] 腾讯云对象存储资源浏览器启动脚本

REM 检查Node.js是否安装
where node >nul 2>nul
if %ERRORLEVEL% neq 0 (
  echo [错误] 未找到Node.js，请先安装Node.js
  exit /b 1
)

REM 检查npm是否安装
where npm >nul 2>nul
if %ERRORLEVEL% neq 0 (
  echo [错误] 未找到npm，请先安装npm
  exit /b 1
)

REM 检查并释放指定端口
call :check_and_free_port 3005
call :check_and_free_port 5173

REM 安装后端依赖
echo [信息] 检查后端依赖...
if not exist "node_modules" (
  echo [警告] 后端依赖未安装，正在安装...
  call npm install
  if %ERRORLEVEL% neq 0 (
    echo [错误] 后端依赖安装失败
    exit /b 1
  )
  echo [信息] 后端依赖安装完成
) else (
  echo [信息] 后端依赖已安装
)

REM 安装前端依赖
echo [信息] 检查前端依赖...
if not exist "frontend\node_modules" (
  echo [警告] 前端依赖未安装，正在安装...
  cd frontend
  call npm install
  if %ERRORLEVEL% neq 0 (
    echo [错误] 前端依赖安装失败
    cd ..
    exit /b 1
  )
  cd ..
  echo [信息] 前端依赖安装完成
) else (
  echo [信息] 前端依赖已安装
)

REM 启动后端
echo [信息] 启动后端服务...
start "后端服务" cmd /c "npm run dev"

REM 启动前端
echo [信息] 启动前端服务...
start "前端服务" cmd /c "cd frontend && npm run dev"

echo [信息] 所有服务已启动
echo [信息] 前端地址: http://localhost:5173
echo [信息] 后端地址: http://localhost:3005
echo [信息] 关闭命令窗口可停止服务

REM 保持脚本窗口打开
pause
goto :eof

:check_and_free_port
setlocal
set port=%~1
echo [信息] 检查端口 %port% 是否被占用...

REM 查找占用端口的进程PID
for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":%port% "') do (
  set pid=%%a
  goto :found_pid
)
:found_pid

REM 如果找到PID，尝试结束进程
if defined pid (
  echo [警告] 端口 %port% 被进程 !pid! 占用，尝试终止...
  
  REM 获取进程名称
  for /f "tokens=1" %%b in ('tasklist /fi "PID eq !pid!" /fo list ^| findstr "Image"') do (
    set process=%%b
  )
  
  REM 如果是系统进程，显示警告
  if "!process!"=="Image:" (
    echo [警告] 无法确定进程名称，可能是系统进程
  ) else (
    echo [信息] 进程名称: !process!
  )
  
  REM 询问用户是否终止进程
  set /p answer="是否终止此进程? (y/n): "
  if /i "!answer!"=="y" (
    taskkill /F /PID !pid!
    if %ERRORLEVEL% equ 0 (
      echo [信息] 成功终止进程 !pid!，端口 %port% 已释放
    ) else (
      echo [错误] 无法终止进程 !pid!，可能需要管理员权限
    )
  ) else (
    echo [警告] 端口 %port% 仍被占用，可能导致启动失败
  )
) else (
  echo [信息] 端口 %port% 未被占用
)

endlocal
goto :eof 